#ifndef FEEDBACK_H_INCLUDED
#define FEEDBACK_H_INCLUDED

#include "mhdef.h"
#include "cmd.h"

typedef struct _SENSOR_BITS SENSOR_BITS;
typedef struct _ERROR_BITS ERROR_BITS;

struct _SENSOR_BITS
{
    int hxk : 1;
    int h4 : 1;
    int h3 : 1;
    int q4 : 1;
    int q3 : 1;
    int qxk : 1;
    int h2 : 1;
    int h1 : 1;
    int q2 : 1;
    int q1 : 1;
    int fcam1 : 1;
    int bcam1 : 1;
    int fcam2 : 1;
    int bcam2 : 1;
    int fcam1_status : 1;       /* 前三角1状态位 */
    int bcam1_status : 1;       /* 后三角1状态位 */

    int fcam2_status : 1;       /* 前三角2状态位 */
    int bcam2_status : 1;       /* 后三角2状态位 */
    int qxk2 : 1;               /* 前辛克2零位 */
    int hxk2 : 1;               /* 后辛克2零位 */
    int reserve : 12;
};

struct _ERROR_BITS
{
    int hxk : 1;
    int h4 : 1;
    int h3 : 1;
    int q4 : 1;
    int q3 : 1;
    int qxk : 1;
    int h2 : 1;
    int h1 : 1;
    int q2 : 1;
    int q1 : 1;
    int yc : 1;
    int cam : 1;
    int sel : 1;
    int qxk2 : 1;
    int hxk2 : 1;
    int reserve : 1;

    int sel24V : 1;
    int selN24V : 1;
    int camN24V : 1;
    int ycN24V : 1;
    int fcam1 : 1;
    int bcam1 : 1;
    int fcam2 : 1;
    int bcam2 : 1;
    int reserve2 : 8;
};

typedef struct _CRGSTATE CRGSTATE;

struct _CRGSTATE
{
    uchar yc_state[2][2];
    uchar cam_state[2][4];
    uchar sel_state[2][8];
    short motor_pos[2][14];
};

typedef struct _FEEDBACK FEEDBACK;

struct _FEEDBACK
{
    SENSOR_BITS sensor;
    ERROR_BITS error;
};

int feedback_get_state(MH_UDP *pudp, FEEDBACK *fb, int type);
int feedback_get_error_state(MH_UDP *pudp, FEEDBACK *fb, int type);
int feedback_get_sensor_state(MH_UDP *pudp, FEEDBACK *fb, int type);
int feedback_get_crg_state(MH_UDP *pudp, CRGSTATE *crgstate);
#endif // FEEDBACK_H_INCLUDED
